package com.test.design.pattern.singleton.demo6;

/**
 * @ClasName Singleton
 * @Descripution TODO  懒汉式-方式3（双重检查锁）
 * @Author leikw
 * @Date 2021/11/1 9:01
 * @Version V1.0
 */
public class Singleton {

    private Singleton(){};

    private static volatile Singleton singleton;
//    要解决双重检查锁模式带来空指针异常的问题，只需要使用 volatile 关键字, volatile 关
//键字可以保证可见性和有序性。

    public static Singleton getInstance(){
        if(singleton == null){
            synchronized (Singleton.class){
                if(singleton == null){
                    singleton = new Singleton();
                }
            }
        }

        return singleton;
    }

//添加 volatile 关键字之后的双重检查锁模式是一种比较好的单例实现模式，能够保证在多线程
//的情况下线程安全也不会有性能问题。

}
